package com.sss.hloster0202;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerThread extends Thread {
    //服务器DatagramSocket
	// 服务器DatagramSocket监听的端口和客户端的端口号一致，否则无法建立连接
	private DatagramSocket ssocket;

	public void run() {

		try {
			// 初始化服务器的DatagramSocket,需要制定端口号，因为服务器端的DatagramSocket需要在服务器制定的端口号对客户端的请求进行监听
			ssocket = new DatagramSocket(8890);
			// 服务器端的DatagramSocket创建一个用于接收服务器端的DatagramPacket
			// 也就是说，服务器端使用DatagramPacket来接收服务器端发送的消息内容
			// 创建一个DatagramPacket使用的字节数组
			byte[] buf = new byte[1024];
			DatagramPacket dp = new DatagramPacket(buf, buf.length);
			// 使用死循环监听客户端的请求
			while (true) {
				//////// 接收消息/////////
				// 将客户端发送到的消息接收到服务器端的DatagramPacket中
				ssocket.receive(dp);
				// 获取本次接收的信息的字节的个数
				int len = dp.getLength();
				// 把接收到的字节转换为字符串
				String strMsgRecived = new String(buf, 0, len);
				System.out.println(strMsgRecived);

				//////////// 发送消息//////////////

				// 需要发送的消息
				String strMsgSend = new String("你好客户端，老夫是服务器端，老夫已经接收到你的消息！！");
				// 将需要发送的消息打包到DatagramPacket数据包中
				DatagramPacket dpsend = new DatagramPacket(strMsgSend.getBytes(), 0, strMsgSend.getBytes().length,
						dp.getSocketAddress());
				// 使用DatagramSocket发送数据包到网络
				ssocket.send(dpsend);
				// 输出信息
				System.out.println(strMsgSend);

			}
		} catch (Exception e) {

			e.printStackTrace();
		}
	}
}
